package project02.controller.gh;

import java.util.Calendar;

import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;

import project02.cool.Consts;
import project02.cool.Helper;
import project02.cool.Util;
import project02.model.DateData;
import project02.model.UserInfo;

public class IndexController extends Controller {

    private Helper helper = Helper.getInstance();
    private Util util = Util.getInstance();

    @Override
    public Navigation run() {

        // ユーザIDをセッションより取得
        UserInfo user = sessionScope("userInfo");

        // 現在日時を取得
        Calendar cal = Calendar.getInstance();
        cal = helper.getGMT8Cal(cal);

        // 直近の出勤データ
        DateData strikeData = new DateData();

        // 直近の出勤データを取得します
        try {
            strikeData = util.chkGh(user.getUserId(), cal);
        } catch (Exception e) {
            DateData sendData = new DateData();
            sendData.setYear(helper.getYear(cal));
            sendData.setMonth(helper.getMonth(cal));
            sendData.setDate(helper.getDay(cal));
            sendData.setGoHome(cal.getTime());
            requestScope("sendData", sendData);
            requestScope("result", "<script type=\"text/javascript\"> window.alert('出勤データが異常です." + e + "'); </script>");
            return forward("regGtw.jsp");
        }

        if (strikeData.getDataId() == null) {
            DateData sendData = new DateData();
            sendData.setYear(helper.getYear(cal));
            sendData.setMonth(helper.getMonth(cal));
            sendData.setDate(helper.getDay(cal));
            sendData.setGoHome(cal.getTime());
            requestScope("sendData", sendData);
            requestScope("result", "<script type=\"text/javascript\"> window.alert('出勤データが異常です.'); </script>");
            return forward("regGtw.jsp");
        }

        // 退勤情報を登録します
        try {
            util.setGh(strikeData, cal);
        } catch (Exception e) {
            requestScope("result", "<script type=\"text/javascript\"> window.alert('退勤処理に失敗しました.'); </script>");
            return forward("../");
        }
        requestScope("result", "<script type=\"text/javascript\"> window.alert('退勤処理を完了しました.'); </script>");

        // 以下メッセージの取得、表示
        Calendar calMsg = Calendar.getInstance();
        calMsg.setTime(strikeData.getGoToWork());
        String message = util.getMessage(user.getUserId(), calMsg, Consts.ghMsg);
        if (message != null && message != "") {
            String editMsg = "";
            editMsg += "<script type=\"text/javascript\"> window.alert('";
            editMsg += message;
            editMsg += "'); </script>";
            requestScope("messageData", editMsg);
        }

        return forward("../");
    }
}
